change gtk_tree_view_column_cell_render, gtk_tree_view_column_cell_focus,
authorKristian Rietveld <kris@gtk.org>
Tue, 19 Feb 2002 18:21:50 +0000 (18:21 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Tue, 19 Feb 2002 18:21:50 +0000 (18:21 +0000)
Tue Feb 19 17:36:31 2002  Kristian Rietveld  <kris@gtk.org>

        * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
        gtk_tree_view_column_cell_render,
        gtk_tree_view_column_cell_focus,
        gtk_tree_view_column_cell_draw_focus and
        gtk_tree_view_column_cell_set_dirty to be private functions.

        * gtktreeviewcolumn.[ch]: add install_handler argument to
        _cell_set_dirty to control if _mark_rows_col_dirty (which calls
        install_presize_handler) gets called, set widths correctly so
        autosizing works (#71870)

        * gtktreeview.c (gtk_tree_view_column_autosize): new function,
        (gtk_tree_view_button_press): make double click on column
        separator resize the row (#71870)
        (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
        (#71869, suggestion by Anders Carlsson)

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtktreeprivate.h
gtk/gtktreeview.c
gtk/gtktreeviewcolumn.c
gtk/gtktreeviewcolumn.h

index fdf2605464a699753a47573bf2112c9af39cc1a5..b478283b283ca790c8a3fb6dd213dc9622a95d95 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+Tue Feb 19 17:36:31 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+       gtk_tree_view_column_cell_render,
+       gtk_tree_view_column_cell_focus,
+       gtk_tree_view_column_cell_draw_focus and
+       gtk_tree_view_column_cell_set_dirty to be private functions.
+
+       * gtktreeviewcolumn.[ch]: add install_handler argument to
+       _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+       install_presize_handler) gets called, set widths correctly so
+       autosizing works (#71870)
+
+       * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+       (gtk_tree_view_button_press): make double click on column
+       separator resize the row (#71870)
+       (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+       (#71869, suggestion by Anders Carlsson)
+
 Mon Feb 18 23:16:16 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
index fdf2605464a699753a47573bf2112c9af39cc1a5..b478283b283ca790c8a3fb6dd213dc9622a95d95 100644 (file)
@@ -1,3 +1,22 @@
+Tue Feb 19 17:36:31 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+       gtk_tree_view_column_cell_render,
+       gtk_tree_view_column_cell_focus,
+       gtk_tree_view_column_cell_draw_focus and
+       gtk_tree_view_column_cell_set_dirty to be private functions.
+
+       * gtktreeviewcolumn.[ch]: add install_handler argument to
+       _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+       install_presize_handler) gets called, set widths correctly so
+       autosizing works (#71870)
+
+       * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+       (gtk_tree_view_button_press): make double click on column
+       separator resize the row (#71870)
+       (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+       (#71869, suggestion by Anders Carlsson)
+
 Mon Feb 18 23:16:16 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
index fdf2605464a699753a47573bf2112c9af39cc1a5..b478283b283ca790c8a3fb6dd213dc9622a95d95 100644 (file)
@@ -1,3 +1,22 @@
+Tue Feb 19 17:36:31 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+       gtk_tree_view_column_cell_render,
+       gtk_tree_view_column_cell_focus,
+       gtk_tree_view_column_cell_draw_focus and
+       gtk_tree_view_column_cell_set_dirty to be private functions.
+
+       * gtktreeviewcolumn.[ch]: add install_handler argument to
+       _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+       install_presize_handler) gets called, set widths correctly so
+       autosizing works (#71870)
+
+       * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+       (gtk_tree_view_button_press): make double click on column
+       separator resize the row (#71870)
+       (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+       (#71869, suggestion by Anders Carlsson)
+
 Mon Feb 18 23:16:16 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
index fdf2605464a699753a47573bf2112c9af39cc1a5..b478283b283ca790c8a3fb6dd213dc9622a95d95 100644 (file)
@@ -1,3 +1,22 @@
+Tue Feb 19 17:36:31 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+       gtk_tree_view_column_cell_render,
+       gtk_tree_view_column_cell_focus,
+       gtk_tree_view_column_cell_draw_focus and
+       gtk_tree_view_column_cell_set_dirty to be private functions.
+
+       * gtktreeviewcolumn.[ch]: add install_handler argument to
+       _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+       install_presize_handler) gets called, set widths correctly so
+       autosizing works (#71870)
+
+       * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+       (gtk_tree_view_button_press): make double click on column
+       separator resize the row (#71870)
+       (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+       (#71869, suggestion by Anders Carlsson)
+
 Mon Feb 18 23:16:16 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
index fdf2605464a699753a47573bf2112c9af39cc1a5..b478283b283ca790c8a3fb6dd213dc9622a95d95 100644 (file)
@@ -1,3 +1,22 @@
+Tue Feb 19 17:36:31 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+       gtk_tree_view_column_cell_render,
+       gtk_tree_view_column_cell_focus,
+       gtk_tree_view_column_cell_draw_focus and
+       gtk_tree_view_column_cell_set_dirty to be private functions.
+
+       * gtktreeviewcolumn.[ch]: add install_handler argument to
+       _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+       install_presize_handler) gets called, set widths correctly so
+       autosizing works (#71870)
+
+       * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+       (gtk_tree_view_button_press): make double click on column
+       separator resize the row (#71870)
+       (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+       (#71869, suggestion by Anders Carlsson)
+
 Mon Feb 18 23:16:16 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
index fdf2605464a699753a47573bf2112c9af39cc1a5..b478283b283ca790c8a3fb6dd213dc9622a95d95 100644 (file)
@@ -1,3 +1,22 @@
+Tue Feb 19 17:36:31 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+       gtk_tree_view_column_cell_render,
+       gtk_tree_view_column_cell_focus,
+       gtk_tree_view_column_cell_draw_focus and
+       gtk_tree_view_column_cell_set_dirty to be private functions.
+
+       * gtktreeviewcolumn.[ch]: add install_handler argument to
+       _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+       install_presize_handler) gets called, set widths correctly so
+       autosizing works (#71870)
+
+       * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+       (gtk_tree_view_button_press): make double click on column
+       separator resize the row (#71870)
+       (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+       (#71869, suggestion by Anders Carlsson)
+
 Mon Feb 18 23:16:16 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
index fdf2605464a699753a47573bf2112c9af39cc1a5..b478283b283ca790c8a3fb6dd213dc9622a95d95 100644 (file)
@@ -1,3 +1,22 @@
+Tue Feb 19 17:36:31 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtktreeprivate.h, gtktreeviewcolumn.[ch], gtktreeview.c: change
+       gtk_tree_view_column_cell_render,
+       gtk_tree_view_column_cell_focus,
+       gtk_tree_view_column_cell_draw_focus and
+       gtk_tree_view_column_cell_set_dirty to be private functions.
+
+       * gtktreeviewcolumn.[ch]: add install_handler argument to
+       _cell_set_dirty to control if _mark_rows_col_dirty (which calls
+       install_presize_handler) gets called, set widths correctly so
+       autosizing works (#71870)
+
+       * gtktreeview.c (gtk_tree_view_column_autosize): new function,
+       (gtk_tree_view_button_press): make double click on column
+       separator resize the row (#71870)
+       (gtk_tree_view_get_dest_row_at_pos): change DnD threshold to 33%
+       (#71869, suggestion by Anders Carlsson)
+
 Mon Feb 18 23:16:16 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkmain.[ch]: Add routines _gtk_find_module(),
index f443c693998a45ce6de83d1cdef8e8d74d9470e0..792a3bbdd369f51b9a39c183b7b4bc6c1fe7e299 100644 (file)
@@ -310,7 +310,22 @@ GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView      *tree
 void              _gtk_tree_selection_set_tree_view      (GtkTreeSelection *selection,
                                                           GtkTreeView      *tree_view);
 
-
+void             _gtk_tree_view_column_cell_render      (GtkTreeViewColumn *tree_column,
+                                                         GdkWindow         *window,
+                                                         GdkRectangle      *background_area,
+                                                         GdkRectangle      *cell_area,
+                                                         GdkRectangle      *expose_area,
+                                                         guint              flags);
+gboolean         _gtk_tree_view_column_cell_focus       (GtkTreeViewColumn *tree_column,
+                                                         gint               direction);
+void             _gtk_tree_view_column_cell_draw_focus  (GtkTreeViewColumn *tree_column,
+                                                         GdkWindow         *window,
+                                                         GdkRectangle      *background_area,
+                                                         GdkRectangle      *cell_area,
+                                                         GdkRectangle      *expose_area,
+                                                         guint              flags);
+void             _gtk_tree_view_column_cell_set_dirty   (GtkTreeViewColumn *tree_column,
+                                                         gboolean           install_handler);
 
 
 #ifdef __cplusplus
index b41bc7963e0260610182beec8eb1094dc241eeee..3876a466061524cd6b0214a0b38d348f9feb3be2 100644 (file)
@@ -342,6 +342,8 @@ static gboolean gtk_tree_view_real_expand_row                (GtkTreeView
 static void     gtk_tree_view_real_set_cursor                (GtkTreeView       *tree_view,
                                                              GtkTreePath       *path,
                                                              gboolean           clear_and_select);
+static void     gtk_tree_view_column_autosize                (GtkTreeView       *tree_view,
+                                                             GtkTreeViewColumn *tree_column);
 
 /* interactive search */
 static void     gtk_tree_view_search_dialog_destroy     (GtkWidget        *search_dialog,
@@ -1869,6 +1871,12 @@ gtk_tree_view_button_press (GtkWidget      *widget,
        {
          gpointer drag_data;
 
+         if (event->type == GDK_2BUTTON_PRESS)
+           {
+             gtk_tree_view_column_autosize (tree_view, column);
+             break;
+           }
+
          if (gdk_pointer_grab (column->window, FALSE,
                                GDK_POINTER_MOTION_HINT_MASK |
                                GDK_BUTTON1_MOTION_MASK |
@@ -2845,12 +2853,12 @@ gtk_tree_view_bin_expose (GtkWidget      *widget,
                * level of the tree we're dropping at.
                */
               highlight_x = cell_area.x;
-             gtk_tree_view_column_cell_render (column,
-                                               event->window,
-                                               &background_area,
-                                               &cell_area,
-                                               &event->area,
-                                               flags);
+             _gtk_tree_view_column_cell_render (column,
+                                                event->window,
+                                                &background_area,
+                                                &cell_area,
+                                                &event->area,
+                                                flags);
              if ((node->flags & GTK_RBNODE_IS_PARENT) == GTK_RBNODE_IS_PARENT)
                {
                  gint x, y;
@@ -2863,12 +2871,12 @@ gtk_tree_view_bin_expose (GtkWidget      *widget,
            }
          else
            {
-             gtk_tree_view_column_cell_render (column,
-                                               event->window,
-                                               &background_area,
-                                               &cell_area,
-                                               &event->area,
-                                               flags);
+             _gtk_tree_view_column_cell_render (column,
+                                                event->window,
+                                                &background_area,
+                                                &cell_area,
+                                                &event->area,
+                                                flags);
            }
          if (node == cursor &&
              ((column == tree_view->priv->focus_column &&
@@ -2876,12 +2884,12 @@ gtk_tree_view_bin_expose (GtkWidget      *widget,
                GTK_WIDGET_HAS_FOCUS (widget)) ||
               (column == tree_view->priv->edited_column)))
            {
-             gtk_tree_view_column_cell_draw_focus (column,
-                                                   event->window,
-                                                   &background_area,
-                                                   &cell_area,
-                                                   &event->area,
-                                                   flags);
+             _gtk_tree_view_column_cell_draw_focus (column,
+                                                    event->window,
+                                                    &background_area,
+                                                    &cell_area,
+                                                    &event->area,
+                                                    flags);
            }
          cell_offset += column->width;
        }
@@ -4775,7 +4783,7 @@ gtk_tree_view_style_set (GtkWidget *widget,
   for (list = tree_view->priv->columns; list; list = list->next)
     {
       column = list->data;
-      gtk_tree_view_column_cell_set_dirty (column);
+      _gtk_tree_view_column_cell_set_dirty (column, TRUE);
     }
 
   _gtk_rbtree_mark_invalid (tree_view->priv->tree);
@@ -5020,7 +5028,7 @@ gtk_tree_view_row_changed (GtkTreeModel *model,
 
       if (column->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
        {
-         gtk_tree_view_column_cell_set_dirty (column);
+         _gtk_tree_view_column_cell_set_dirty (column, TRUE);
        }
     }
 
@@ -5180,7 +5188,7 @@ gtk_tree_view_row_has_child_toggled (GtkTreeModel *model,
            if (GTK_TREE_VIEW_COLUMN (list->data)->visible)
              {
                GTK_TREE_VIEW_COLUMN (list->data)->dirty = TRUE;
-               gtk_tree_view_column_cell_set_dirty (GTK_TREE_VIEW_COLUMN (list->data));
+               _gtk_tree_view_column_cell_set_dirty (GTK_TREE_VIEW_COLUMN (list->data), TRUE);
                break;
              }
        }
@@ -5233,7 +5241,7 @@ gtk_tree_view_row_deleted (GtkTreeModel *model,
   for (list = tree_view->priv->columns; list; list = list->next)
     if (((GtkTreeViewColumn *)list->data)->visible &&
        ((GtkTreeViewColumn *)list->data)->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
-      gtk_tree_view_column_cell_set_dirty ((GtkTreeViewColumn *)list->data);
+      _gtk_tree_view_column_cell_set_dirty ((GtkTreeViewColumn *)list->data, TRUE);
 
   /* Ensure we don't have a dangling pointer to a dead node */
   ensure_unprelighted (tree_view);
@@ -5526,7 +5534,7 @@ gtk_tree_view_discover_dirty_iter (GtkTreeView *tree_view,
        {
          if (depth * tree_view->priv->expander_size + horizontal_separator + width > column->requested_width)
            {
-             gtk_tree_view_column_cell_set_dirty (column);
+             _gtk_tree_view_column_cell_set_dirty (column, TRUE);
              retval = TRUE;
            }
        }
@@ -5534,7 +5542,7 @@ gtk_tree_view_discover_dirty_iter (GtkTreeView *tree_view,
        {
          if (horizontal_separator + width > column->requested_width)
            {
-             gtk_tree_view_column_cell_set_dirty (column);
+             _gtk_tree_view_column_cell_set_dirty (column, TRUE);
              retval = TRUE;
            }
        }
@@ -6370,7 +6378,7 @@ gtk_tree_view_move_cursor_left_right (GtkTreeView *tree_view,
                                               &iter,
                                               GTK_RBNODE_FLAG_SET (cursor_node, GTK_RBNODE_IS_PARENT),
                                               cursor_node->children?TRUE:FALSE);
-      if (gtk_tree_view_column_cell_focus (column, count))
+      if (_gtk_tree_view_column_cell_focus (column, count))
        {
          tree_view->priv->focus_column = column;
          found_column = TRUE;
@@ -7088,12 +7096,30 @@ gtk_tree_view_set_headers_visible (GtkTreeView *tree_view,
   g_object_notify (G_OBJECT (tree_view), "headers_visible");
 }
 
+static void
+gtk_tree_view_column_autosize (GtkTreeView *tree_view,
+                              GtkTreeViewColumn *column)
+{
+  g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+  g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (column));
+
+  if (column->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
+    return;
+
+  _gtk_tree_view_column_cell_set_dirty (column, FALSE);
+
+  presize_handler_callback (tree_view);
+  while (validate_rows_handler (tree_view));
+
+  gtk_widget_queue_resize (GTK_WIDGET (tree_view));
+}
 
 /**
  * gtk_tree_view_columns_autosize:
  * @tree_view: A #GtkTreeView.
  *
- * Resizes all columns to their optimal width.
+ * Resizes all columns to their optimal width. Only works after the
+ * treeview has been realized.
  **/
 void
 gtk_tree_view_columns_autosize (GtkTreeView *tree_view)
@@ -7109,7 +7135,7 @@ gtk_tree_view_columns_autosize (GtkTreeView *tree_view)
       column = list->data;
       if (column->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
        continue;
-      gtk_tree_view_column_cell_set_dirty (column);
+      _gtk_tree_view_column_cell_set_dirty (column, TRUE);
       dirty = TRUE;
     }
 
@@ -7252,7 +7278,7 @@ gtk_tree_view_remove_column (GtkTreeView       *tree_view,
 
          tmp_column = GTK_TREE_VIEW_COLUMN (list->data);
          if (tmp_column->visible)
-           gtk_tree_view_column_cell_set_dirty (tmp_column);
+           _gtk_tree_view_column_cell_set_dirty (tmp_column, TRUE);
        }
 
       if (tree_view->priv->n_columns == 0 &&
@@ -7314,7 +7340,7 @@ gtk_tree_view_insert_column (GtkTreeView       *tree_view,
        {
          column = GTK_TREE_VIEW_COLUMN (list->data);
          if (column->visible)
-           gtk_tree_view_column_cell_set_dirty (column);
+           _gtk_tree_view_column_cell_set_dirty (column, TRUE);
        }
       gtk_widget_queue_resize (GTK_WIDGET (tree_view));
     }
@@ -8075,7 +8101,7 @@ gtk_tree_view_real_collapse_row (GtkTreeView *tree_view,
       if (column->visible == FALSE)
        continue;
       if (gtk_tree_view_column_get_sizing (column) == GTK_TREE_VIEW_COLUMN_AUTOSIZE)
-       gtk_tree_view_column_cell_set_dirty (column);
+       _gtk_tree_view_column_cell_set_dirty (column, TRUE);
     }
 
   if (tree_view->priv->destroy_count_func)
@@ -9006,7 +9032,7 @@ gtk_tree_view_get_dest_row_at_pos (GtkTreeView             *tree_view,
 {
   gint cell_y;
   gdouble offset_into_row;
-  gdouble quarter;
+  gdouble third;
   GdkRectangle cell;
   GtkTreeViewColumn *column = NULL;
   GtkTreePath *tmp_path = NULL;
@@ -9027,8 +9053,8 @@ gtk_tree_view_get_dest_row_at_pos (GtkTreeView             *tree_view,
   if (tree_view->priv->tree == NULL)
     return FALSE;
 
-  /* If in the top quarter of a row, we drop before that row; if
-   * in the bottom quarter, drop after that row; if in the middle,
+  /* If in the top third of a row, we drop before that row; if
+   * in the bottom third, drop after that row; if in the middle,
    * and the row has children, drop into the row.
    */
 
@@ -9053,19 +9079,19 @@ gtk_tree_view_get_dest_row_at_pos (GtkTreeView             *tree_view,
 
   tmp_path = NULL;
 
-  quarter = cell.height / 4.0;
+  third = cell.height / 3.0;
 
   if (pos)
     {
-      if (offset_into_row < quarter)
+      if (offset_into_row < third)
         {
           *pos = GTK_TREE_VIEW_DROP_BEFORE;
         }
-      else if (offset_into_row < quarter * 2)
+      else if (offset_into_row < (cell.height / 2.0))
         {
           *pos = GTK_TREE_VIEW_DROP_INTO_OR_BEFORE;
         }
-      else if (offset_into_row < quarter * 3)
+      else if (offset_into_row < third * 2)
         {
           *pos = GTK_TREE_VIEW_DROP_INTO_OR_AFTER;
         }
@@ -9181,12 +9207,12 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView  *tree_view,
         }
 
       if (gtk_tree_view_column_cell_is_visible (column))
-       gtk_tree_view_column_cell_render (column,
-                                         drawable,
-                                         &background_area,
-                                         &cell_area,
-                                         &expose_area,
-                                         0);
+       _gtk_tree_view_column_cell_render (column,
+                                          drawable,
+                                          &background_area,
+                                          &cell_area,
+                                          &expose_area,
+                                          0);
 
       cell_offset += column->width;
     }
index df79c9b66cc87c1884a283ae63535ef0e647bd40..86d2af96e143fd651f007151237a57011df63d83 100644 (file)
@@ -1210,7 +1210,7 @@ gtk_tree_view_column_add_attribute (GtkTreeViewColumn *tree_column,
   info->attributes = g_slist_prepend (info->attributes, g_strdup (attribute));
 
   if (tree_column->tree_view)
-    gtk_tree_view_column_cell_set_dirty (tree_column);
+    _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
 
 }
 
@@ -1304,7 +1304,7 @@ gtk_tree_view_column_set_cell_data_func (GtkTreeViewColumn   *tree_column,
   info->destroy = destroy;
 
   if (tree_column->tree_view)
-    gtk_tree_view_column_cell_set_dirty (tree_column);
+    _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
 }
 
 
@@ -1338,7 +1338,7 @@ gtk_tree_view_column_clear_attributes (GtkTreeViewColumn *tree_column,
   info->attributes = NULL;
 
   if (tree_column->tree_view)
-    gtk_tree_view_column_cell_set_dirty (tree_column);
+    _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
 }
 
 
@@ -1362,7 +1362,7 @@ gtk_tree_view_column_set_spacing (GtkTreeViewColumn *tree_column,
 
   tree_column->spacing = spacing;
   if (tree_column->tree_view)
-    gtk_tree_view_column_cell_set_dirty (tree_column);
+    _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
 }
 
 /**
@@ -2319,12 +2319,12 @@ gtk_tree_view_column_cell_render_or_focus (GtkTreeViewColumn *tree_column,
  * #GtkTreeView.
  **/
 void
-gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
-                                 GdkWindow         *window,
-                                 GdkRectangle      *background_area,
-                                 GdkRectangle      *cell_area,
-                                 GdkRectangle      *expose_area,
-                                 guint              flags)
+_gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
+                                  GdkWindow         *window,
+                                  GdkRectangle      *background_area,
+                                  GdkRectangle      *cell_area,
+                                  GdkRectangle      *expose_area,
+                                  guint              flags)
 {
   g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column));
   g_return_if_fail (background_area != NULL);
@@ -2391,8 +2391,8 @@ _gtk_tree_view_column_cell_event (GtkTreeViewColumn  *tree_column,
 
 
 gboolean
-gtk_tree_view_column_cell_focus (GtkTreeViewColumn *tree_column,
-                                gint               direction)
+_gtk_tree_view_column_cell_focus (GtkTreeViewColumn *tree_column,
+                                 gint               direction)
 {
   if (GTK_TREE_VIEW (tree_column->tree_view)->priv->focus_column == tree_column)
     return FALSE;
@@ -2400,12 +2400,12 @@ gtk_tree_view_column_cell_focus (GtkTreeViewColumn *tree_column,
 }
 
 void
-gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn       *tree_column,
-                                     GdkWindow               *window,
-                                     GdkRectangle            *background_area,
-                                     GdkRectangle            *cell_area,
-                                     GdkRectangle            *expose_area,
-                                     guint                    flags)
+_gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn       *tree_column,
+                                      GdkWindow               *window,
+                                      GdkRectangle            *background_area,
+                                      GdkRectangle            *cell_area,
+                                      GdkRectangle            *expose_area,
+                                      guint                    flags)
 {
   gint focus_line_width;
   GtkStateType cell_state;
@@ -2475,7 +2475,8 @@ gtk_tree_view_column_cell_is_visible (GtkTreeViewColumn *tree_column)
 }
 
 void
-gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column)
+_gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column,
+                                     gboolean           install_handler)
 {
   GList *list;
 
@@ -2486,12 +2487,17 @@ gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column)
       info->requested_width = 0;
     }
   tree_column->dirty = TRUE;
-  tree_column->requested_width = 0;
+  tree_column->resized_width = MAX (tree_column->requested_width, tree_column->button_request);
+  tree_column->requested_width = -1;
+  tree_column->width = 0;
 
   if (tree_column->tree_view &&
       GTK_WIDGET_REALIZED (tree_column->tree_view))
     {
-      _gtk_tree_view_install_mark_rows_col_dirty (GTK_TREE_VIEW (tree_column->tree_view));
+      if (install_handler)
+       _gtk_tree_view_install_mark_rows_col_dirty (GTK_TREE_VIEW (tree_column->tree_view));
+      else
+       GTK_TREE_VIEW (tree_column->tree_view)->priv->mark_rows_col_dirty = TRUE;
       gtk_widget_queue_resize (tree_column->tree_view);
     }
 }
index a5055e3973d1093be49b1731ccdb5bca3877dcaf..1534683d28feece0f4f3b51d3c99ff0180ad6e06 100644 (file)
@@ -210,23 +210,7 @@ void                    gtk_tree_view_column_cell_get_size       (GtkTreeViewCol
                                                                  gint                    *y_offset,
                                                                  gint                    *width,
                                                                  gint                    *height);
-void                    gtk_tree_view_column_cell_render         (GtkTreeViewColumn       *tree_column,
-                                                                 GdkWindow               *window,
-                                                                 GdkRectangle            *background_area,
-                                                                 GdkRectangle            *cell_area,
-                                                                 GdkRectangle            *expose_area,
-                                                                 guint                    flags);
-gboolean                gtk_tree_view_column_cell_focus          (GtkTreeViewColumn       *tree_column,
-                                                                 gint                     direction);
-void                    gtk_tree_view_column_cell_draw_focus     (GtkTreeViewColumn       *tree_column,
-                                                                 GdkWindow               *window,
-                                                                 GdkRectangle            *background_area,
-                                                                 GdkRectangle            *cell_area,
-                                                                 GdkRectangle            *expose_area,
-                                                                 guint                    flags);
 gboolean                gtk_tree_view_column_cell_is_visible     (GtkTreeViewColumn       *tree_column);
-void                    gtk_tree_view_column_cell_set_dirty      (GtkTreeViewColumn       *tree_column);
-
 
 #ifdef __cplusplus
 }